// 表格通用方法

import { getPageSettings } from '@/api/common/common'

// 排序规则改变
export function sortChange(column, _this) {
  if (!_this.pageData.oldOrderByColumn) {
    _this.pageData.oldOrderByColumn = _this.pageData.orderByColumn
  }
  if (column.order) {
    column.order = column.order === 'ascending' ? 'asc' : 'desc'
    _this.pageData.orderByColumn = column.prop
    _this.pageData.isAsc = column.order
  } else {
    _this.pageData.orderByColumn = _this.pageData.oldOrderByColumn
    _this.pageData.oldOrderByColumn = ''
    _this.pageData.isAsc = 'desc'
  }
  _this.getList()
}

// 单击行触发
export function rowClick(row, _this, column) {
  if (column && (column.property === 'code' || column.property === 'noticeTitle' ||
    column.property === 'picture' ||
    column.property === 'content' ||

    column.property === 'newMaterialName')) {
    return
  }
  _this.$refs.table.toggleRowSelection(row)
}

// 选择框改变时触发
export function selectionChange(val, _this) {
  _this.selections = val
  // 实时记录选中的数据
  setTimeout(function() {
    changePageCoreRecordDataFunction(_this)
  }, 50)
}

// 加载表格数据时，设置之前选中的行为选中状态
export function setSelectRow(_this) {
  if (!_this.selectionsAll || _this.selectionsAll.length <= 0) {
    return
  }
  // 标识当前行的唯一键的名称
  var mainId = _this.mainId
  var selectAllIds = []
  _this.selectionsAll.forEach(function(row) {
    selectAllIds.push(row[mainId])
  })
  _this.$refs.table.clearSelection()
  for (var i = 0; i < _this.tableData.length; i++) {
    if (!_this.tableData[i].expandDetails) {
      if (selectAllIds.indexOf(_this.tableData[i][mainId]) >= 0) {
        // 设置选中，table组件需要使用ref="table"
        _this.$refs.table.toggleRowSelection(_this.tableData[i], true)
      }
    } else {
      _this.tableData[i].expandDetails.forEach(item => {
        if (selectAllIds.indexOf(item[mainId]) >= 0) {
          // 设置选中，table组件需要使用ref="table"
          _this.$refs.table.toggleRowSelection(item, true)
        }
      })
    }
  }
}

// 记忆选择核心方法
function changePageCoreRecordDataFunction(_this) {
  // 标识当前行的唯一键的名称
  const mainId = _this.mainId
  // var vm = vm;
  // 如果总记忆中还没有选择的数据，那么就直接取当前页选中的数据，不需要后面一系列计算
  if (_this.selectionsAll.length <= 0) {
    _this.selectionsAll = _this.selections
    return
  }
  // 总选择里面的key集合
  var selectAllIds = []
  _this.selectionsAll.forEach(function(row) {
    selectAllIds.push(row[mainId])
  })
  var selectIds = []
  // 获取当前页选中的id
  _this.selections.forEach(function(row) {
    selectIds.push(row[mainId])
    // 如果总选择里面不包含当前页选中的数据，那么就加入到总选择集合里
    if (selectAllIds.indexOf(row[mainId]) < 0) {
      _this.selectionsAll.push(row)
    }
  })
  var noSelectIds = []
  // 得到当前页没有选中的id
  _this.tableData.forEach(function(row) {
    if (row.expandDetails && row.expandDetails.length > 1) {
      row.expandDetails.forEach(item => {
        if (selectIds.indexOf(item[mainId]) < 0) {
          noSelectIds.push(item[mainId])
        }
      })
    } else {
      if (selectIds.indexOf(row[mainId]) < 0) {
        noSelectIds.push(row[mainId])
      }
    }
  })
  noSelectIds.forEach(function(id) {
    if (selectAllIds.indexOf(id) >= 0) {
      for (var i = 0; i < _this.selectionsAll.length; i++) {
        if (_this.selectionsAll[i][mainId] === id) {
          // 如果总选择中有未被选中的，那么就删除这条
          _this.selectionsAll.splice(i, 1)
          break
        }
      }
    }
  })
}

import { getPageSetting } from '@/api/common/systemSet' // api
// 初始化页面设置
export function initPageSetting(page) {
  // 获取页面配置
  getPageSetting({ bandUserId: page.userId, pageId: page.pageId }).then(res => {
    if (res.data.fieldSetting) {
      page.tableColumns = JSON.parse(res.data.fieldSetting) // 表格字段
    } else {
      page.tableColumns = page.$deepClone(page.columns) // 如果没有保存数据
    }
    // 遍历tableColumns ,获取快速查询的字段,存入pageData中
    const quickSearchColumns = []
    page.tableColumns.forEach(item => {
      if (item.quickSearch) {
        quickSearchColumns.push(item.prop)
      }
    })
    // 查询的时候把 quickSearchColumns:当前快速查询字段 带进去
    page.pageData.quickSearchColumns = quickSearchColumns.join(',')

    if (res.data.sortSetting) {
      const sortSetting = JSON.parse(res.data.sortSetting)// 排序规则，分页
      page.pageData.pageCode = 1
      page.pageData.pageSize = sortSetting.numPerPage
      page.pageData.prop = sortSetting.sortField // 排序字段
      page.pageData.order = sortSetting.sortRule // 排序规则
    }
    if (res.data.exportSetting) {
      page.exportObject.exportType = JSON.parse(res.data.exportSetting).exportType // 导出设置
      page.exportObject.exportColumns = JSON.parse(res.data.exportSetting).exportColumns
    } else {
      page.exportObject.exportColumns = page.$deepClone(page.columns) // 如果没有保存数据
    }
    page.tableKey = page.tableKey ? 0 : 1
    page.getList()
  })
}
// 删除数据
export function deleteData(page, uId) {
  // 如果是单个删除
  if (uId) {
    page.$confirm(page.$t('tip.deleteContent'), page.$t('tip.deleteTitle'), {// 确认弹框
      confirmButtonText: page.$t('button.confirm'),
      cancelButtonText: page.$t('button.cancel'),
      type: 'warning'
    }).then(() => {
      page.loading = true
      page.deleteMethod(uId).then(res => {
        if (res) {
          switch (res.result) {
            case 'inUse':
              page.$message({
                message: page.$t('user.inUse'),
                type: 'warning',
                duration: 1000
              })
              break
            case 'success':
              page.$message({
                type: 'success',
                message: page.$t('tip.deleteSuccess'),
                duration: 1000
              })
              page.selections = []// 重置选择框
              page.selectionsAll = []// 重置选择框
              page.getList()
              break
            default:
          }
        }
      }).finally(() => {
        page.loading = false
      })
    })
  } else {
    if (page.selectionsAll.length === 0) {
      page.$message({
        type: 'warning',
        message: page.$t('tip.plzSelectDeleteIds'),
        duration: 1000
      })
      return
    }
    page.$confirm(page.$t('tip.deleteContent'), page.$t('tip.deleteTitle'), {// 确认弹框
      confirmButtonText: page.$t('button.confirm'),
      cancelButtonText: page.$t('button.cancel'), cancelButtonClass: 'cancelClass',
      type: 'warning'
    }).then(() => {
      page.loading = true
      let deleteIds = ''
      page.selectionsAll.forEach(function(item) {
        deleteIds += (item[page.mainId] + ',')// 数据格式为  deleteIds = 'id1,id2,id3'
      })
      page.deleteMethod(deleteIds).then(res => {
        if (res) {
          switch (res.result) {
            case 'inUse':
              page.$message({
                message: page.$t('user.inUse'),
                type: 'warning',
                duration: 1000
              })
              break
            case 'success':
              page.$message({
                type: 'success',
                message: page.$t('tip.deleteSuccess'),
                duration: 1000
              })
              page.selections = []// 重置选择框
              page.selectionsAll = []// 重置选择框
              page.getList()
              break
            default:
          }
        }
      }).finally(() => {
        page.loading = false
      })
    }).catch(() => {

    })
  }
}
// 提交数据
export function submitData(page) {
  // 批量提交数据
  if (page.selectionsAll.length === 0) {
    page.$message({
      type: 'warning',
      message: '请选择要提交的数据',
      duration: 1000
    })
    return
  }
  page.$confirm('此操作将永久不可更改数据,是否继续', '提交确认', {// 确认弹框
    confirmButtonText: '确认',
    cancelButtonText: '取消', cancelButtonClass: 'cancelClass',
    type: 'warning'
  }).then(() => {
    page.loading = true
    let submitIds = ''
    page.selectionsAll.forEach(function(item) {
      submitIds += (item[page.mainId] + ',')// 数据格式为  submitIds = 'id1,id2,id3'
    })
    page.submitMethod(submitIds).then(res => {
      if (res) {
        switch (res.result) {
          case 'success':
            page.$message({
              type: 'success',
              message: '提交成功',
              duration: 1000
            })
            page.selections = []// 重置选择框
            page.selectionsAll = []// 重置选择框
            page.$refs.table.clearSelection() // 清除选中
            page.getList()
            break
          default:
        }
      }
    }).finally(() => {
      page.loading = false
    })
  })
}
// 审核数据
export function examineData(page) {
  // 批量审核数据
  if (page.selectionsAll.length === 0) {
    page.$message({
      type: 'warning',
      message: '请选择要审核的数据',
      duration: 1000
    })
    return
  }
  page.$confirm('此操作将永久不可更改数据,是否继续', '审核确认', {// 确认弹框
    confirmButtonText: '确认',
    cancelButtonText: '取消', cancelButtonClass: 'cancelClass',
    type: 'warning'
  }).then(() => {
    page.loading = true
    let examineIds = ''
    page.selectionsAll.forEach(function(item) {
      examineIds += (item[page.mainId] + ',')// 数据格式为  submitIds = 'id1,id2,id3'
    })
    page.examineMethod(examineIds).then(res => {
      if (res) {
        switch (res.result) {
          case 'success':
            page.$message({
              type: 'success',
              message: '审核成功',
              duration: 1000
            })
            page.selections = []// 重置选择框
            page.selectionsAll = []// 重置选择框
            page.getList()
            break
          default:
        }
      }
    }).finally(() => {
      page.loading = false
    })
  })
}

import PageConfigurationLevel2 from '@/components/JLINK2/common/PageConfigurationLevel2'

export function getSecondPageSetting(page, secondPageSettingId,
  tableColumnsKey = 'tableColumns',
  defaultTableColumns) {
  page.loading = true
  const cacheTableColumns = this.$deepClone(defaultTableColumns)
  page[tableColumnsKey] = [] // 先清空 （强制重新渲染表格）
  getPageSettings({ userId: page.userId, pageId: secondPageSettingId }).then(res => {
    if (res.data.json) {
      const pageSettings = res.data.json

      const tableColumnsCache = JSON.parse(JSON.stringify(pageSettings.TableColumns)) // 解决传值过来无法修改值的bug

      const tableColumnsCache_del = JSON.parse(JSON.stringify(tableColumnsCache)) // 深拷贝值来操作

      //  2023年11月20日：旧的页面设置里已保存的字段，如果新的代码里已经把这个字段去掉了，那也去掉
      tableColumnsCache_del.forEach(item => {
        if (!cacheTableColumns.some(iitem => item.prop == iitem.prop)) {
          tableColumnsCache.splice(tableColumnsCache.findIndex(iitem => item.prop == iitem.prop), 1)
        }
      })

      page[tableColumnsKey] = tableColumnsCache
      console.log('tableColumnsCache', tableColumnsCache)
    } else {
      page[tableColumnsKey] = cacheTableColumns
    }
  }).finally(() => {
    page.loading = false
  })
}

export function setSecondPageSetting(secondPageSettingId, defaultTableColumns) {
  this.$layer.iframe({// 弹框
    content: {
      content: PageConfigurationLevel2, // 传递的组件对象
      parent: this, // 当前的vue对象
      data: {
        secondPageSettingId: secondPageSettingId,
        defaultTableColumns: defaultTableColumns
      }// props
    },
    area: ['660px', '800px'],
    title: '页面配置', // 标题
    shadeClose: false // 点击遮罩是否关闭
  })
}

